Generally, a pipeline may include a number of processing elements to service requests. A retry pipeline may allow for retrying of requests that fail to be serviced. In a retry based pipeline, care needs to be taken to ensure that each operation eventually makes tangible forward progress; that is, wins arbitration for the pipeline and is not repeatedly retried due to resource unavailability or conflict.
To guarantee this, it is sometimes necessary to prioritize certain operations over others to ensure that starvation conditions do not persist for any given operation. It is equally important to ensure that this prioritization does not introduce a dependency between two operations that is contrary to those allowed by the parameters of the design (e.g., protocol definition) so as not to introduce a cyclic dependency, and thus, deadlock.